import random class Coccinelle: def __init__(self, sexe, age, niv_nutrition): self.age = age self.esperance_de_vie = random.randint(200, 350) self.sexe = sexe self.niv_nutrition = niv_nutrition def chasser(self, nb_proies, nb_coccinelles): if nb_coccinelles == 0: return nb_proies proies_par_cocci = nb_proies / nb_coccinelles if proies_par_cocci > 20: consomme = random.randint(12, 20) elif proies_par_cocci > 10: consomme = random.randint(8, 15) else: consomme = random.randint(3, 8) consomme = min(consomme, nb_proies) if consomme >= 10: self.niv_nutrition += 1 else: self.niv_nutrition = max(0, self.niv_nutrition - 1) return nb_proies - consomme def reproduction(self): """ Une femelle avec un niveau de nutrition >= 2 engendre exactement deux descendants : un mâle et une femelle. """ descendants = [] if self.sexe == "femelle" and self.niv_nutrition >= 2: descendants.append(Coccinelle("male", 0, 0)) descendants.append(Coccinelle("femelle", 0, 0)) self.niv_nutrition = 0 return descendants def a_survecu(self): """ Met à jour l'âge de la coccinelle et indique si elle est encore en vie. """ self.age = self.age + 1 return self.age < self.esperance_de_vie def __repr__(self): return f"Coccinelle {self.sexe}, âge: {self.age}/{self.esperance_de_vie}, niv_nutrition: {self.niv_nutrition}" def evolution(population, nb_proies): """ Simule une journée dans l'écosystème : - chasse des coccinelles - reproduction - vieillissement et mortalité - croissance des pucerons population est une liste d'instances de la classe Coccinelle nb_proies est un entier indiquant le nombre de proies Cette fonction renvoie un couple (population_suivante, nouveau_nb_proies) indiquant la nouvelle population à la fin de la journée et le nombre de proies. """ population_suivante = [] nouveau_nes = [] nb_coccinelles = len(population) for coccinelle in population: nb_proies = coccinelle.chasser(nb_proies, nb_coccinelles) if coccinelle.a_survecu(): population_suivante.append(coccinelle) nouveau_nes += coccinelle.reproduction() # Croissance naturelle des pucerons (augmentation de 20% par jour) nb_proies = int(nb_proies * 1.2) # Ajout des nouveau-nés en fin de journée population_suivante += nouveau_nes return population_suivante, nb_proies ############################################################################# # Écrire ci-dessous le code pour les questions de l'énoncé # #############################################################################